﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using University.Workshop.DataAccess;

namespace University.Workshop.Business
{
    public class ManagerCistern
    {
        public static void VerifyDataPerson(Model.Cistern mp)
        {
            if(string.IsNullOrEmpty(mp.Person.PersonId))
                throw new Exception("Se necesita un Carnet de Identidad.");
            if (mp.Person.PersonId.Equals("0"))
                throw new Exception("El Numero de carnet que ingreso es invalido.");
            if (mp.Person.PersonId.Count() < 5)
                throw new Exception("El carnet de identidad debe contener al menos 5 digitos.");
            if (string.IsNullOrEmpty(mp.Person.Names))
                throw new Exception("Se necesita al menos un nombre");
            if (string.IsNullOrEmpty(mp.Person.LastNames))
                throw new Exception("Se necesita al menos un apellido");
        }

        public static void NewCistern(Model.Cistern newCistern)
        {
            ManagerPerson.UpdatePersonIfExisteElseCreate(newCistern.Person);
            newCistern.DriverId = newCistern.Person.PersonId;
            newCistern.IsActive = true;
            newCistern.Person = null;
            DataAccess.DataAccessCistern.RegisterNewCistern(newCistern);
        }

        public static void UpdateCistern(Model.Cistern cistern)
        {
            Model.Person p = new Model.Person() { LastNames = cistern.Person.LastNames, 
                Names = cistern.Person.Names, 
                PersonId = cistern.Person.PersonId, 
                Phone = cistern.Person.Phone };
            ManagerPerson.UpdatePersonIfExisteElseCreate(p);
            cistern.Person = null;
            cistern.DriverId = p.PersonId;
            DataAccessCistern.UpdateCistern(cistern);
            //cistern.Person = null;

        }


        public static void VerifyDataCisternIsCorrect(Model.Cistern mp)
        {
            if (GetCisternByPlate(mp) != null)
                throw new Exception("La Placa ingresada ya existe");
            if (mp.LicencePlate.Count() < 6)
                throw new Exception("La placa ingresada no es valida.");
            if (mp.Capacity==0)
                throw new Exception("La capacidad ingresada no es valida.");
        }

        public static Model.Cistern GetCisternByPlate(Model.Cistern mp)
        {
            ICollection<Model.Cistern> Cisterns = DataAccess.DataAccessCistern.SearchCisternByPlate(mp);
            if (Cisterns.Count != 1)
                return null;
            else
                return Cisterns.First();
        }

        public static ICollection<Model.Cistern> SearchCisternByParameter(Model.Cistern cisterntoFind, string state)
        {
            ICollection<Model.Cistern> c;
            switch (state)
            {
                case ("Activo"):

                    c = DataAccessCistern.SearchCisternByParameterEnable(cisterntoFind);
                    break;
                case ("Inactivo"):

                    c = DataAccessCistern.SearchCisternByParameterDisable(cisterntoFind);
                    break;
                default:
                    c = DataAccessCistern.SearchCisternByParameterAll(cisterntoFind);
                    break;
            }
            if (c.Count == 0)
            {
                throw new Exception("No se encontraron resultados de la busqueda...");
            }
            return c;
        }

        public static void DisableCistern(Model.Cistern CisternForDisable)
        {
            Model.Cistern c = GetCisternByPlate(CisternForDisable);
            DataAccessCistern.DeletePersonFromCistern(CisternForDisable);
        }

    }
}
